package sv.com.renacempleo.dso.red;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import sv.com.renacempleo.dso.BaseServiceImpl;
import sv.com.renacempleo.dto.ctg.CtgCatalogo;
import sv.com.renacempleo.dto.red.RedEmpresaMedioBusqueda;
import sv.com.renacempleo.dto.red.RedEmpresaSucursales;
import sv.com.renacempleo.dto.red.RedEmpresas;
import sv.com.renacempleo.dto.red.RedEmpresasContactos;
import sv.com.renacempleo.dto.red.RedOferta;
import sv.com.renacempleo.dto.red.RedOfertaPrestaciones;
import sv.com.renacempleo.exception.WebException;
import sv.com.renacempleo.web.util.WebUtilidades;

public class RedEmpresasServiceImpl extends BaseServiceImpl implements RedEmpresasService{

	@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false, rollbackFor = {Exception.class, WebException.class})
	public void guardarEmpresa(RedEmpresas redEmpresas) throws WebException {
		// TODO Auto-generated method stub
		if(redEmpresas.getRedEmpresaFolio() == null)
			redEmpresas.setRedEmpresaFechaRegistro(WebUtilidades.dateFormatAsDD_MM_YYYY.format(new Date()));
			save(redEmpresas);
		
		update(redEmpresas);
		
	}

	@Override
	public void deleteEmpresa(Long redEmpresaFolio) throws WebException {
		// TODO Auto-generated method stub
		
	}

	@Override
	@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false, rollbackFor = {Exception.class, WebException.class})
	public void guardarMediosBusquedaEmpresa(Long redEmpresaFolio,
			String[] redMediosBusquedaEmpresa) throws WebException {
		String hqlQuery = "delete from RedEmpresaMedioBusqueda where redEmpresaFolio.redEmpresaFolio = :redEmpresaFolio";
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("redEmpresaFolio", redEmpresaFolio);
		executeNonHibernateQuery(hqlQuery, parameters);
		RedEmpresaMedioBusqueda redEmpresaMedioBusqueda = null;
		if(redMediosBusquedaEmpresa != null)
			for (String ctgMedioBusquedaId : redMediosBusquedaEmpresa) {
				redEmpresaMedioBusqueda = new RedEmpresaMedioBusqueda();
				redEmpresaMedioBusqueda.setCtgMedioBusqueda(new CtgCatalogo(new Long(ctgMedioBusquedaId)));
				redEmpresaMedioBusqueda.setRedEmpresaFolio(new RedEmpresas(redEmpresaFolio));
				save(redEmpresaMedioBusqueda);
			}
	}

	@Override
	@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false, rollbackFor = {Exception.class, WebException.class})
	public void guardarRedEmpresaSucursales(
			RedEmpresaSucursales redEmpresaSucursales) throws WebException {
		save(redEmpresaSucursales);
	}

	@Override
	public void eliminarRedEmpresaSucursales(Long redEmpresaSucursalId)
			throws WebException {
		String hqlQuery = "delete from RedEmpresaSucursales where redEmpresaSucursalId = :redEmpresaSucursalId";
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("redEmpresaSucursalId", redEmpresaSucursalId);
		executeNonHibernateQuery(hqlQuery, parameters);
	}

	@Override
	public void guardarRedEmpresaContactos(
			RedEmpresasContactos redEmpresasContactos) throws WebException {
		save(redEmpresasContactos);
	}

	@Override
	public void eliminarRedEmpresaContactos(Long redEmpresaContactoId)
			throws WebException {
		String hqlQuery = "delete from RedEmpresasContactos where redEmpresaContactoId = :redEmpresaContactoId";
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("redEmpresaContactoId", redEmpresaContactoId);
		executeNonHibernateQuery(hqlQuery, parameters);
	}

	@Override
	public void activarRedEmpresa(Long redEmpresaFolio, String redEmpresaEstado, Long ctgMotivoBajaId)
			throws WebException {
		Map<String, Object> parameters = new HashMap<String, Object>();
		String hqlQuery="update RedEmpresas ";
		if("1".equals(redEmpresaEstado))
			hqlQuery += "set redEmpresaEstado = :redEmpresaEstado  " +
					"where redEmpresaFolio = :redEmpresaFolio" ;
		else{
			hqlQuery += "set ctgMotivoBaja.ctgCatalogoId = :ctgMotivoBajaId, redEmpresaEstado = :redEmpresaEstado   " +
					" where redEmpresaFolio = :redEmpresaFolio";
			parameters.put("ctgMotivoBajaId", ctgMotivoBajaId);
		}
	
		
		parameters.put("redEmpresaEstado", redEmpresaEstado);
		parameters.put("redEmpresaFolio", redEmpresaFolio);
		executeNonHibernateQuery(hqlQuery, parameters);
	}

}
